import adminList from '$v/adminList'
import myAxios from '../util/request'
import {
  addAdminRequest,
  adminListRequest,
  deleteAdminRequest,
  isLoginRequest
} from "$a/admin"

//封装函数渲染视图
const showadminList = async (res) => {
  //尝试请求 如果用户校验失败 则直接跳转到登录页面

  let adminListResult = null
  //只要进入当前路由函数，则开始查询所有管理员信息
  try {
    adminListResult = await adminListRequest();

  } catch (e) {
    alert("获取管理员列表异常:" + e.message)
    if (!e.isLogin) {
      return router.go('/login')
    }
  }
  //渲染二级视图
  res.render(adminList({
    adminList: adminListResult
  }))
}
export default async (req, res) => {
  // 路由切换的时候验证登录
  try {
    await isLoginRequest()
  } catch (e) {
    if (!e.isLogin) {
      return router.go('/login')
    }
  }
  await showadminList(res)
  //在sme中可以获取到整个document 所有我们可以通过这个来绑定事件 console.log(document);
  //给保存按钮添加点击事件
  const oSaveAdminBtn = document.getElementById('saveAdminBtn')
  //每次页面重新渲染后，需要重新绑定事件，在这我们依靠事件委派
  document.onclick = async function (e) {
    //添加管理员逻辑
    if (e.target.id === 'saveAdminBtn') {
      //通过from表单 name属性获取元素
      //获取用户输入内容
      //.trim()方法去掉空格
      const oadiminNameValue = document.adminForm.adminName.value.trim()
      const opasswordValue = document.adminForm.passWord.value.trim()
      const orePasswordValue = document.adminForm.rePassWord.value.trim()
      //进行判断 用户输入内容不能为空和密码是否一致
      if (!oadiminNameValue || !opasswordValue || !orePasswordValue) {
        return alert('请输入,内容不能为空!')
      }
      if (opasswordValue !== orePasswordValue) {
        return alert('两次密码不一致,请重新输入')
      }
      //向后端发送添加管理员请求
      //用try和catch
      try {
        //因为是异步 所以我们需要在await 等到成功的时候在做出反应 
        //在拦截器中配置了公共路径 所以这里省略掉api1
        await addAdminRequest({
          //管理员名称
          adminName: oadiminNameValue,
          //密码
          password: opasswordValue,
          //注册时间
          regTime: new Date().toLocaleString()
        })
        alert('添加成功')
        //添加成功之后,管理添加窗口(手动触发某个元素上的点击事件)
        document.getElementById('clossAdd').click();
        
        //清空表单
        document.adminForm.reset();
        //重新渲染页面
        showadminList(res)
      } catch (e) {
        alert('错误' + e.message);
        if (!e.isLogin) {
          //关闭弹窗解决灰屏
          document.getElementById('addAdminBtn').click()
          return router.go('/login')
        }
      }
    }
    //删除管理员逻辑
    //给删除按钮添加一个自定义属性
    if (e.target.nodeName === 'BUTTON' && e.target.parentNode.nodeName === "TD") {
      
      const adminName = e.target.dataset.adminname // dataset 获取当前元素属性
      alert('确定删除该管理员'+adminName)
      //console.log(adminName);
      //给后端响应
      try {
        await deleteAdminRequest(adminName)
        //alert('删除管理' + adminName + '成功')
        //删除成功后重新渲染页面
        showadminList(res)
      } catch (e) {
        alert('删除管理异常' + e.message)
        if (!e.isLogin) {
          return router.go('/login')
        }
      }
    }
  }
}